package com.ty.skysystem.entity;

import com.baomidou.mybatisplus.annotation.*;

import java.math.BigDecimal;
import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.ty.common.validator.group.SaveGroup;
import com.ty.common.validator.group.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;

/**
 * 承运单信息表: 用于存放和管理承运单信息 外键列: user_id => 外键表: User
 *
 * @author tianyuzhu
 * @email 1659770218@QQ.COM
 * @date 2020-12-11 15:56:09
 */
@Data
@TableName("carriers")
@ApiModel("承运单实体类: 用于存放和管理承运单信息")
public class CarriersEntity implements Serializable {
  private static final long serialVersionUID = 1L;

  /** 承运单编号(自增) */
  @Null(
      message = "新增时不能携带ID",
      groups = {SaveGroup.class})
  @NotNull(
      message = "修改时需要携带ID",
      groups = {UpdateGroup.class})
  @ApiModelProperty("承运单编号(自增)")
  @TableId(value = "carriers_id", type = IdType.AUTO)
  private Long carriersId;
  /** 发货单位 */
  @NotBlank(
      message = "发货单位不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("发货单位")
  private String sendCompany;
  /** 发货单位地址 */
  @NotBlank(
      message = "发货单位地址不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("发货单位地址")
  private String sendAddress;
  /** 发货人 */
  @NotBlank(
      message = "发货人不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("发货人")
  private String sendLinkman;
  /** 发货人电话 */
  @NotBlank(
      message = "发货人电话不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("发货人电话")
  private String sendPhone;
  /** 收货单位 */
  @NotBlank(
      message = "收货单位不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("收货单位")
  private String receiveCompany;
  /** 收货单位地址 */
  @NotBlank(
      message = "收货单位地址不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("收货单位地址")
  private String receiveAddress;
  /** 收货人/联系人 */
  @NotBlank(
      message = "收货人不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("收货人/联系人")
  private String receiveLinkman;
  /** 收货人电话/联系人电话 */
  @NotBlank(
      message = "收货人电话不能为空",
      groups = {SaveGroup.class})
  @ApiModelProperty("收货人电话/联系人电话")
  private String receivePhone;
  /** 承运日期 */
  @ApiModelProperty("承运日期")
  private Date leaverDate;
  /** 收货时间 */
  @ApiModelProperty("收货时间")
  private Date receiveDate;
  /** 完成情况： 0:待调度 1:已调度 2:已签收 完成情况： 0:待调度 1:已调度 2:已签收 3:已结算 */
  @Range(
      min = 0,
      max = 3,
      message = "完成情况必须为0~3",
      groups = {SaveGroup.class, UpdateGroup.class})
  @ApiModelProperty("完成情况： 0:待调度 1:已调度 2:已签收 3:已结算")
  private Integer finishedState;
  /** 保险费 */
  @ApiModelProperty("保险费")
  private BigDecimal insuranceCost;
  /** 运费 */
  @ApiModelProperty("运费")
  private BigDecimal transportCost;
  /** 其他费用 */
  @ApiModelProperty("其他费用")
  private BigDecimal otherCost;
  /** 合计费用 */
  @ApiModelProperty("合计费用")
  private BigDecimal totalCost;
  /** 备注 */
  @ApiModelProperty("备注")
  private String remark;
  /** 业务员 */
  @ApiModelProperty("业务员")
  private Long userId;
  /** 1 表示删除， 0 表示未删除 */
  @ApiModelProperty("逻辑删除 1 表示删除， 0 表示未删除")
  @TableLogic
  @JsonInclude(JsonInclude.Include.NON_NULL)
  private Integer isDeleted;
  /** 创建时间 */
  @ApiModelProperty("创建时间")
  private Date createTime;
  /** 修改时间 */
  @ApiModelProperty("修改时间")
  private Date updateTime;

  /** 车队名称 */
  @TableField(exist = false)
  private String teamName;
}
